#ifndef ACTOR_H
#define ACTOR_H

#include <OgreEntity.h>
#include <OgreCamera.h>
#include <OgreSceneNode.h>
#include <OgreSceneManager.h>
#include <OgreSceneManager.h>
#include <boost/shared_ptr.hpp>
#include <vector>

class Actor
{
    public:
        //for compilation sake
        virtual ~Actor()
        {
        }

        virtual void Update(float timedelta) = 0;
        virtual Ogre::Camera* GetActiveCamera()
        {
            return NULL;
        }
        inline Ogre::SceneNode* GetNode()
        {
            return m_node;
        }
        inline unsigned int GetType()
        {
            return m_type;
        }
        inline Ogre::Camera* GetCamera(unsigned int view)
        {
            return m_cameraList[view];
        }
        inline std::map<unsigned int,Ogre::Camera* >* GetCameraList()
        {
            return &m_cameraList;
        }
    protected:
        unsigned int        m_type;
        Ogre::Entity*     m_entity;
        Ogre::SceneNode*  m_node;
        Ogre::SceneManager* m_scene;

        std::map<unsigned int,Ogre::Camera* > m_cameraList;

        virtual void initCameras() = 0;
};

#endif // ACTOR_H
